/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.uoc.tds.cliente;

import edu.uoc.tds.bean.CentroDocente;
import edu.uoc.tds.common.MostrarCombo;
import edu.uoc.tds.common.RemotoInterface;
import edu.uoc.tds.common.UtilLenguaje;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.rmi.RemoteException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;

public class PantallaConsultaCentroDocente extends javax.swing.JPanel {

    private RemotoInterface objServeis = null;
    private static final long serialVersionUID = 1L;
    private JComboBox comboUniversidad = null;
    private JButton botonBuscar = null;
    private JButton botonAlta = null;
    private JTextField nombre = null;
    private JTextField localidad = null;
    private UtilLenguaje txt = null;
    private JLabel labelNombre = null;
    private JLabel labelUniversidad = null;
    private JTable tablaResultados = null;
    private JScrollPane jScrollPane = null;
    JScrollPane textScroll = null;
    private JTable table = null;
    private JLabel labelBaja = null;
    private JLabel labelLocalidad = null;
    private JRadioButton activo = null;
    private JRadioButton desactivo = null;
    private Integer estado = 0;

    public PantallaConsultaCentroDocente(RemotoInterface pObjServeis) throws RemoteException {
        super();
        objServeis = pObjServeis;
        initComponents();
    }

    private void initComponents() {

        
        this.setLayout(null);
        this.setBounds(new Rectangle(0, 0, 600, 400));
        this.add(getComboUniversidad(), null);

        activo = new JRadioButton("NO");
        activo.setBounds(new Rectangle(150, 80, 50, 20));
        activo.setMnemonic(0);
        activo.setActionCommand("NO");
        activo.setSelected(true);

        desactivo = new JRadioButton("SI");
        desactivo.setBounds(new Rectangle(200, 80, 50, 20));
        desactivo.setMnemonic(1);
        desactivo.setActionCommand("SI");

        // Group the radio buttons.
        ButtonGroup group = new ButtonGroup();
        group.add(activo);
        group.add(desactivo);

        this.add(activo);
        this.add(desactivo);

        desactivo.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent e) {
                estado = null;
            }
        });

        activo.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent e) {
                estado = 0;
            }
        });


        labelNombre = new JLabel();
        labelNombre.setBounds(new Rectangle(150, 50, 100, 20));
        labelNombre.setText(txt.getMessage("pantConsCentro.label.nombre"));
        this.add(labelNombre);

        nombre = new JTextField(10);
        nombre.setBounds(new Rectangle(290, 50, 275, 25));
        this.add(nombre);

        labelUniversidad = new JLabel();
        labelUniversidad.setBounds(new Rectangle(150, 10, 100, 20));
        labelUniversidad.setText(txt.getMessage("pantConsCentro.label.universidad"));
        this.add(labelUniversidad);

        labelBaja = new JLabel();
        labelBaja.setBounds(new Rectangle(10, 80, 150, 20));
        labelBaja.setText(txt.getMessage("pantConsCentro.label.baja"));
        this.add(labelBaja);

        this.add(getBotonBuscar(), null);
        this.add(getBotonAlta(), null);
        tablaResultados = new JTable();
        tablaResultados.addMouseListener(new MouseAdapter() {

            public void mouseClicked(MouseEvent e) {
                int fila = tablaResultados.rowAtPoint(e.getPoint());
                Integer idCentro = new Integer(tablaResultados.getModel().getValueAt(fila, 0).toString());


                PantallaAltaCentroDocente centro;
                try {
                    centro = new PantallaAltaCentroDocente(objServeis, Boolean.FALSE, idCentro);


                    PantallaConsultaCentroDocente.this.removeAll();
                    PantallaConsultaCentroDocente.this.repaint();
                    PantallaConsultaCentroDocente.this.add(centro);
                    PantallaConsultaCentroDocente.this.repaint();


                } catch (RemoteException eRe) {
                    JOptionPane.showMessageDialog(null,
                            txt.getMessage("err.remoto") + "\n" + eRe.getMessage(),
                            txt.getMessage("err"), JOptionPane.ERROR_MESSAGE);
                }
            }
        });

        this.add(tablaResultados);
        this.add(getJScrollPane(), null);
    }

    private JButton getBotonBuscar() {
        if (botonBuscar == null) {
            botonBuscar = new JButton();
            botonBuscar.setBounds(new Rectangle(290, 120, 100, 30));
            botonBuscar.setText(txt.getMessage("pantConsCentro.label.buscar"));
            botonBuscar.addActionListener(new java.awt.event.ActionListener() {

                public void actionPerformed(java.awt.event.ActionEvent e) {
                   
                    jScrollPane.setViewportView(getTablaResultados());

                }
            });
        }
        return botonBuscar;
    }

    private JButton getBotonAlta() {
        if (botonAlta == null) {
            botonAlta = new JButton();
            botonAlta.setBounds(new Rectangle(10, 120, 100, 30));
            botonAlta.setText(txt.getMessage("pantConsCentro.label.alta"));
            botonAlta.addActionListener(new java.awt.event.ActionListener() {

                public void actionPerformed(java.awt.event.ActionEvent e) {

                    
                    PantallaAltaCentroDocente centro;
                    try {
                        centro = new PantallaAltaCentroDocente(objServeis, Boolean.TRUE, null);


                        PantallaConsultaCentroDocente.this.removeAll();
                        PantallaConsultaCentroDocente.this.repaint();
                        PantallaConsultaCentroDocente.this.add(centro);
                        PantallaConsultaCentroDocente.this.repaint();

                    } catch (RemoteException eRe) {
                        JOptionPane.showMessageDialog(null,
                                txt.getMessage("err.remoto") + "\n" + eRe.getMessage(),
                                txt.getMessage("err"), JOptionPane.ERROR_MESSAGE);
                    }

                }
            });
        }
        return botonAlta;
    }

    private JComboBox getComboUniversidad() {

        if (comboUniversidad == null) {
            comboUniversidad = new JComboBox();
            Vector<MostrarCombo> vUniversidad = null;
            try {
                vUniversidad = objServeis.listaUniversidades();
                comboUniversidad = new JComboBox(vUniversidad);
                comboUniversidad.setBounds(new Rectangle(290, 10, 275, 25));
            } catch (Exception eRe) {
                JOptionPane.showMessageDialog(null,
                        txt.getMessage("pantAlta.error.remoto") + "\n" + eRe.getMessage(),
                        txt.getMessage("pantAlta.error"), JOptionPane.ERROR_MESSAGE);

            }

        }
        return comboUniversidad;
    }

    class MyTableModel extends AbstractTableModel {

        private static final long serialVersionUID = 1L;
        protected List vCapcelera = new ArrayList();
        protected List vCentros = new ArrayList();

        public MyTableModel(List<CentroDocente> vCv) {
            setCapcelera();
            setResulTabla(vCv);
        }

        protected void setCapcelera() {
            vCapcelera.add(txt.getMessage("pantConsCentro.tabla.id"));
            vCapcelera.add(txt.getMessage("pantConsCentro.tabla.nombre"));
            vCapcelera.add(txt.getMessage("pantConsCentro.tabla.universidad"));
            vCapcelera.add(txt.getMessage("pantConsCentro.tabla.fechaAlta"));
            vCapcelera.add(txt.getMessage("pantConsCentro.tabla.localidad"));

        }

        private void setResulTabla(List<CentroDocente> vCv) {
            DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            try {
                List<Integer> idCentro = new ArrayList();
                List<String> nombreCentro = new ArrayList();
                List<String> universidad = new ArrayList();
                List<String> fechaAlta = new ArrayList();
                List<String> localidad = new ArrayList();

                for (Iterator<CentroDocente> it = vCv.iterator(); it.hasNext();) {
                    CentroDocente cv = it.next();
                    idCentro.add(cv.getIdCentroDocente());
                    nombreCentro.add(cv.getNombre());
                    universidad.add(cv.getUniversidad().getNombre());
                    fechaAlta.add(sdf.format(cv.getFechaAlta()));
                    localidad.add(cv.getContacto().getLocalidad());
                }
                vCentros.add(idCentro);
                vCentros.add(nombreCentro);
                vCentros.add(universidad);
                vCentros.add(fechaAlta);
                vCentros.add(localidad);

            } catch (Exception e) {
            }
        }

        public int getRowCount() {
            return (((List) vCentros.get(0)).size());
        }

        public int getColumnCount() {
            return (vCentros.size());
        }

        public String getColumnName(int col) {
            return ((String) vCapcelera.get(col));
        }

        public boolean getScrollableTrackViewportHeight() {
            return (true);
        }

        public boolean getScrollableTrackViewportWidth() {
            return (true);
        }

        public Object getValueAt(int fila, int col) {
            return (((List) vCentros.get(col)).get(fila));
        }

        public boolean isCellEditable(int fila, int columna) {
            return (false);
        }
    }

    private JScrollPane getJScrollPane() {
        if (jScrollPane == null) {
            jScrollPane = new JScrollPane();
            jScrollPane.setBounds(new Rectangle(30, 200, 530, 80));
        }
        jScrollPane.setVisible(false);
        return jScrollPane;
    }

    private JTable getTablaResultados() {
        try {

            MostrarCombo universidadCombo = (MostrarCombo) comboUniversidad.getSelectedItem();
            try {
             
                List centros = objServeis.listaConsultaCentros(universidadCombo.getID(), nombre.getText(), estado);

                MyTableModel myTableModel = new MyTableModel(centros);
               
                tablaResultados.setModel(myTableModel);
                jScrollPane.setVisible(true);

            } catch (Exception u) {
                System.out.print(u.getStackTrace());
            }

        } catch (Exception eRe) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("client.err.remot") + "\n" + eRe.getMessage(),
                    txt.getMessage("client.err"), JOptionPane.ERROR_MESSAGE);
        }
        return tablaResultados;
    }
}
